package com.wonders.hs.pd.mm.web.utils;

import org.apache.http.Consts;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.ParseException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingClientConnectionManager;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.codehaus.jettison.json.JSONObject;

import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 发送 http 请求 来访问
 *
 * @author banglong
 * @date 2016/8/18.
 */
public class HttpRequestUtils {

  private static final CloseableHttpClient httpclient = HttpClients.createDefault();

  /**
   * 发送HttpGet请求
   *
   * @param url 访问地址
   * @return 访问结果
   */
  public static String sendGet(String url) {

    HttpGet httpget = new HttpGet(url);
    CloseableHttpResponse response = null;
    try {
      response = httpclient.execute(httpget);
    } catch (IOException e1) {
      e1.printStackTrace();
    }
    String result = null;
    try {
      HttpEntity entity = response.getEntity();
      if (entity != null) {
        result = EntityUtils.toString(entity);
      }
    } catch (ParseException | IOException e) {
      e.printStackTrace();
    } finally {
      try {
        response.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
    return result;
  }

  /**
   * 发送HttpPost请求，参数为map
   *
   * @param url 访问地址
   * @param map 参数
   * @return 访问结果
   */
  public static String sendPost(String url, Map<String, Object> map) {
    List<NameValuePair> formparams = new ArrayList<>();
    for (Map.Entry<String, Object> entry : map.entrySet()) {
      if (entry.getValue() != null) {
        formparams.add(new BasicNameValuePair(entry.getKey(), entry.getValue().toString()));
      }
    }
    UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, Consts.UTF_8);
    HttpPost httppost = new HttpPost(url);
    httppost.setEntity(entity);
    CloseableHttpResponse response = null;
    try {
      response = httpclient.execute(httppost);
    } catch (IOException e) {
      e.printStackTrace();
    }
    HttpEntity entity1 = response.getEntity();
    String result = null;
    try {
      result = EntityUtils.toString(entity1);
    } catch (ParseException | IOException e) {
      e.printStackTrace();
    }
    return result;
  }

  /**
   * 发送不带参数的HttpPost请求
   *
   * @param url url访问地址
   * @return 访问结果
   */
  public static String sendPost(String url) {
    HttpPost httppost = new HttpPost(url);
    CloseableHttpResponse response = null;
    try {
      response = httpclient.execute(httppost);
    } catch (IOException e) {
      e.printStackTrace();
    }
    HttpEntity entity = response.getEntity();
    String result = null;
    try {
      result = EntityUtils.toString(entity);
    } catch (ParseException | IOException e) {
      e.printStackTrace();
    }
    return result;
  }
}
